\subsection{Библиотека Азеро и Свиерстры}

Библиотека Азеро и Свиерстры\footnote{http://www.cs.ruu.nl/groups/ST/Software/PP} отличается от предыдущих библиотек тем, что дает возможность явным образом задать 
несколько несвязанных вариантов раскладки документа. В этой библиотеке есть комбинатор ``\lstinline[language=Haskell]{<|>}''\footnote{
В данном тексте, с целью не усложнять восприятие, изменены обозначения 
комбинаторов библиотеки Свиерстры на обозначения, подобные тем, что были уже рассмотрены в библиотеке Хьюза. Семантика комбинаторов описана без изменений, согласно оригинальной статье и соответствующей библиотеке.
}:

% \inputminted{haskell}{Podkopaev/codes/chooseSw.hs}
\lstinputlisting[language=Haskell]{Podkopaev/codes/chooseSw.hs}

Этот комбинатор берет два документа и создает новый, который при раскладке может стать первым или вторым, в зависимости от того, какой из документов раскладывается оптимальней. \textit{Оптимальной} раскладкой для документа считается раскладка, удовлетворяющая ограничению на ширину документа и имеющая минимальную высоту.

Наличие комбинатора ``\lstinline[language=Haskell]{<|>}'' сразу же решает проблему со скобкой, которая была поднята в обзоре библиотеки Хьюза (см. рис.~\ref{fig:bracketSwierstra})\footnote{
	В примере используется функция ``\lstinline[language=Haskell]{element_h1}''. Эта функция выбирает из вариантов раскладки документа те, которые имеют высоту 1.
}.

\begin{figure}[h!]
	% \inputminted{haskell}{Podkopaev/codes/bracketSwierstra.hs}
	\lstinputlisting[language=Haskell]{Podkopaev/codes/bracketSwierstra.hs}
	\caption{Принтер конструкции ``\lstinline{write}'', удовлетворяющий примеру с Рис.~\ref{fig:lGoodWriteEx}}
	\label{fig:bracketSwierstra}
\end{figure}

% Данная вариативность достигается за счет особого представления документа. В данной библиотеке он представляется как ленивый список раскладок, причем список отсортирован в порядке возрастания количества строк раскладки.

Библиотека Азеро и Свиерстры обладает самым богатым набором комбинаторов и, благодаря оператору ``\lstinline[language=Haskell]{<|>}'', позволяет выразить практически любые принтеры. Но, так же как остальные рассмотренные библиотеки, не дает механизмов для простого и наглядного задания принтеров.
